﻿using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace 并行
{
    class Program
    {
        static void Main(string[] args)
        {
            /****
             * Parallel  源码可以看到 先搞个 RangeManager rangeManager = new RangeManager((long)fromInclusive, (long)toExclusive, 1L, nNumExpectedWorkers);
             * 应该是平均分配task来执行的，采取电脑，
             * 100/16
             * 
             * 并行计算 ，一般都是必须分区的
             * 底层都是task
             * ****/

            //Console.WriteLine(Environment.ProcessorCount);


            //Parallel.For(0, 100, new ParallelOptions { 
            // MaxDegreeOfParallelism=4,// 设置最大几个线程执行任务
            // // CancellationToken= new System.Threading.CancellationToken(),//可以取消
            //}, (iteme, loop) =>
            //{
            //    if (iteme == 10)
            //    { 
            //        //尽量的避免使用，因为是并行的 
            //        loop.Stop();    
            //    }
            //    Console.WriteLine(iteme);

            //});
            // for 就做一些数组的累加
            //int totals=0;

            //Parallel.For(1, 100,()=> { return 0; }, (curent,loop,total)=> {
            //    total += (int)curent;
            //    return total;
            //},total=>{
            //    Console.WriteLine(total);
            //    Interlocked.Add(ref totals,total);
            //});

            //Console.WriteLine("counts:"+totals);

            Dictionary<int, int> dic = new Dictionary<int, int>()
            {
                {1,100 },
                {2,200 },
                {3,300 }
            };

            Parallel.ForEach(dic,(item)=> {
                Console.WriteLine(item.Key+"--"+item.Value);
            });

            Parallel.Invoke(() => {
                Console.WriteLine($"任务1,tid={Thread.CurrentThread.ManagedThreadId}");
            },() =>
            {
                Console.WriteLine($"任务2,tid={Thread.CurrentThread.ManagedThreadId}");

            });    
                
            Console.ReadLine();     

        }
    }
}
